package com.zdxlz.fcmp.business.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zdxlz.fcmp.common.mybatis.enums.OpFlagEnum;
import com.zdxlz.fcmp.common.mybatis.enums.ProductTypeEnum;
import com.zdxlz.fcmp.common.mybatis.enums.TicketStatusEnum;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDateTime;
import static com.zdxlz.fcmp.common.core.constant.ParameterVerifyMsgConstants.*;

/**
 * <p>
 * 工单信息表
 * </p>
 *
 * @author: aman
 * @since 2025-02-08
 */
@Data
@TableName("ticket_info")
public class TicketInfoEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 工单主键ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 流水号|订单号，唯一，长度不超过32字符
     */
    @NotBlank(message = STREAMINGNO_VERIFY_MSG)
    @TableField("streaming_no")
    private String streamingNo;

    /**
     * 操作类别，1：开通，2：退单， 枚举类：OpFlagEnum
     */
    @NotNull(message = OPFLAG_VERIFY_MSG)
    @TableField("op_flag")
    private OpFlagEnum opFlag;

    /**
     * 产品类型，如：1：量子加密组网，枚举类：ProductTypeEnum
     */
    @NotNull(message = PRODUCTTYPE_VERIFY_MSG)
    @TableField("product_type")
    private ProductTypeEnum productType;

    /**
     * 工单状态，如：1：新建，2：处理中，3：已完成，默认新建,枚举类：TicketStatusEnum
     */
    @NotNull(message = STATUS_VERIFY_MSG)
    @TableField("status")
    private TicketStatusEnum status;

    /**
     * 工单来源,默认为ICT
     */
    @NotBlank(message = SOURCE_VERIFY_MSG)
    @TableField("source")
    private String source;

    /**
     * 设备主键
     */
    @NotNull(message = DEVICEID_VERIFY_MSG)
    @TableField("device_id")
    private Integer deviceId;

    /**
     * 创建时间
     */
    @TableField("create_time")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField("update_time")
    private LocalDateTime updateTime;
}
